package com.openlogic.logic.concurent;

import java.util.concurrent.Callable;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @ClassName: CallableTemplate
 * @Description: 多线程模板类
 * @author weiyongpeng
 * @date 2024年11月24日 上午10:02:30
 * @param <V>
 */
public abstract class CallableTemplate<V> implements Callable<V> {

	public static final Logger log = LoggerFactory.getLogger(CallableTemplate.class);

	/**
	 * 描述：前置处理，子类可以Override该方法
	 * @Title: beforeProcess
	 * @author weiyongpeng
	 * @date 2024年11月24日 上午10:02:44
	 */
	public void beforeProcess() {
		log.info("before process....");
	}

	/**
	 * 描述：处理业务逻辑的方法,需要子类去Override
	 * @Title: process
	 * @return
	 * @author weiyongpeng
	 * @date 2024年11月24日 上午10:02:59
	 */
	public abstract V process();

	/**
	 * 描述：后置处理，子类可以Override该方法
	 * @Title: afterProcess
	 * @author weiyongpeng
	 * @date 2024年11月24日 上午10:03:15
	 */
	public void afterProcess() {
		log.info("after process....");
	}

	@Override
	public V call() {
		beforeProcess();
		V result = process();
		afterProcess();
		return result;
	}
}
